/*	--- 网络编程基础 ---) {
在学习Java网络编程之前，我们先来了解什么是计算机网络。) {
计算机网络是指两台或更多的计算机组成的网络，在同一个网络中，任意两台计算机都可以直接通信，因为所有计算机都需要遵循同一种网络协议。) {
-------------------------) {
Q: 那什么是互联网呢？) {
A: 互联网是网络的网络（internet）,即把很多计算机网络连接起来,形成一个全球统一的互联网。) {
对某个特定的计算机网络来说,它可能使用【网络协议ABC】,而另一个计算机网络可能使用【网络协议XYZ】。) {
如果计算机网络各自的【通讯协议】不统一，就没法把不同的网络连接起来形成互联网。) {
因此，为了把计算机网络接入互联网，就必须使用【TCP/IP协议】。) {
【TCP/IP协议】泛指【互联网协议】，其中最重要的两个协议是【TCP协议】和【IP协议】。) {
只有使用【TCP/IP协议】的计算机才能够联入互联网,使用其他网络协议（例如NetBIOS、AppleTalk协议等）是无法联入互联网的。) {
------------------------------------------) {
#	IP地址) {
在互联网中，【一个IP地址】用于 唯一标识 【一个网络接口（Network Interface）】。) {
一台联入互联网的计算机肯定有一个IP地址，但也可能有多个IP地址。) {
IP地址分为IPv4和IPv6两种。) {
IPv4采用【32位地址】，类似101.202.99.12，
IPv4地址总共有2^32个（大约42亿）) {
而IPv6采用【128位地址】，类似2001:0DA8:100A:0000:0000:1020:F2F3:1428。
而IPv6地址则总共有2^128个（大约340万亿亿亿亿）) {
IPv4的地址目前已耗尽，而IPv6的地址是根本用不完的。) {
IP地址又分为【公网IP地址】和【内网IP地址】。) {
【公网IP地址】可以直接被访问，【内网IP地址】只能在内网访问。) {
内网IP地址类似于：
	· 192.168.x.x
	· 10.x.x.x) {
有一个【特殊的IP地址】，称之为【本机地址】，它总是 127.0.0.1。) {
IPv4地址实际上是一个【32位整数】。例如：) {
	106717964 = 0x65ca630c (106717964 % 16 = 0x...)
	          = 65  ca  63 0c (滤掉0x)
	          = 101.202.99.12) {
如果【一台计算机】只有【一个网卡】，并且接入了【网络】。) {
那么，它有一个【本机地址127.0.0.1】,
还有一个【IP地址】，例如101.202.99.12,
可以通过这个IP地址接入网络。) {
如果一台计算机有【2块网卡】,
那么除了【本机地址】，它可以有【2个IP地址】，可以分别接入【2个网络】。) {
通常【连接2个网络的设备】是【路由器/交换机】，它至少有2个IP地址，分别接入不同的网络，让网络之间连接起来。
(2个IP地址,实现对接外网+对接内网,也就是路由器的核心)) {
如果2台计算机位于同一个网络，那么他们之间可以【直接通信】。
因为他们的【IP地址前段】是相同的，也就是【网络号】是相同的。) {
【网络号】是【IP地址】通过【子网掩码】过滤后得到的。例如：) {
某台计算机的【IP】是101.202.99.2，【子网掩码】是255.255.255.0，那么计算该计算机的网络号是：) {
	IP = 101.202.99.2
	Mask = 255.255.255.0
	Network = IP & Mask = 101.202.99.0
	(Network = IP 与门 Mask = ...)) {
-------------------) {
每台计算机都需要 正确配置 【IP地址和子网掩码】,根据这2个就可以计算网络号(Network),如果两台计算机计算出的【网络号】相同,说明两台计算机在同一个网络,可以直接通信。) {
如果2台计算机计算出的【网络号】不同,那么2台计算机不在同一个网络,不能直接通信,它们之间必须通过【路由器/交换机】这样的网络设备【间接通信】,我们把【这种用于间接通信的设备】称为【网关】。) {
【网关的作用】就是【连接多个网络】,负责把【来自一个网络的数据包】发到【另一个网络】，这个过程叫【路由】。) {
所以，一台计算机的一个网卡会有3个关键配置：
	· IP地址(IPv4 地址, IPv6 地址), 例如：10.0.2.15
	· 子网掩码(IPv4 子网掩码), 例如：255.255.255.0
	· 网关的IP地址(IPv4 默认网关), 例如：10.0.2.2) {
----------------------------------------------) {
#	域名) {
因为直接记忆IP地址非常困难，所以我们通常使用【域名】访问【某个特定的服务】。) {
【域名解析服务器DNS】负责把【域名】翻译成【对应的IP】,客户端再根据【IP地址】访问【服务器】。) {
用 nslookup 可以查看域名对应的IP地址：) {
	$ nslookup www.liaoxuefeng.com
	Server:  xxx.xxx.xxx.xxx  <-- DNS
	Address: xxx.xxx.xxx.xxx#53  <-- DNS_IP) {
	Non-authoritative answer:
	Name:    www.liaoxuefeng.com
	Address: 47.98.33.223     <-- 查到的对应的IP地址) {
有一个特殊的本机域名localhost，它对应的IP地址总是本机地址127.0.0.1。) {
-----------------------------------------------------) {
#	网络模型) {
由于【计算机网络】从【底层的传输】到【高层的软件设计】十分复杂，要合理地设计计算机网络模型,必须采用分层模型,每一层负责处理自己的操作。) {
【OSI(Open System Interconnect)网络模型】 是 ISO组织定义的一个【计算机互联的标准模型】,注意它只是【一个定义】,目的是为了简化【网络各层的操作】,提供【标准接口】便于实现和维护。) {
这个模型从上到下依次是：) {
	· 应用层，提供'应用程序之间的通信'；
	· 表示层：处理'数据格式', 加/解密等等；
	· 会话层：负责建立和维护'会话(Session)'；
	· 传输层：负责提供'端到端'的可靠传输；
	· 网络层：负责根据'目标地址',选择'路由'来传输数据；
	· 链路层和物理层: 负责把'数据'进行分片并且真正通过物理网络传输.例如:无线网、光纤等。) {
【互联网】实际使用的【TCP/IP模型】并不是对应到OSI的7层模型) {
而是大致对应【OSI的5层模型】：) {
	OSI				TCP/IP
-----------------------------------
	应用层			应用层 -- process通信
	表示层
	会话层
	传输层			传输层 -- 端到端的可靠传输
	网络层			IP层   -- 根据目标地址,选择合适路由传输
	链路层			网络接口层  -- 软件层网络数据进入硬件层
	物理层) {
---------------------------------------------------) {
#	常用协议) {
【IP协议】是一个【分组交换】,它不保证可靠传输。) {
而【TCP协议】是【传输控制协议】,它是【面向连接的协议】,支持【可靠传输】和【双向通信】。) {
【TCP协议】是建立在【IP协议】之上的。
简单地说,【IP协议】只负责发数据包,不保证顺序和正确性;
而【TCP协议】负责控制数据包传输,它在传输数据之前需要先建立连接,建立连接后才能传输数据,传输完后还需要断开连接。
(IP协议,直接发射; TCP协议,先进行双向通信连接,再发数据,发完还需要断开双向连接)) {
【TCP协议】之所以能保证数据的可靠传输,是通过:
	1.接收确认
	2.超时重传
这些机制实现的。) {
并且,【TCP协议】允许双向通信,即通信双方可以【同时】发送和接收数据。) {
【TCP协议】也是应用最广泛的协议,许多高级协议都是建立在TCP协议之上的,例如HTTP、SMTP等。
(HTTP,SMTP都是建立双向通信之上)) {
-----------------------) {
UDP协议(User Datagram Protocol) 用户数据报文传输,
是一种【数据报文协议】,它是【无连接协议】,不保证可靠传输。) {
因为【UDP协议】在通信前不需要建立连接,因此它的【传输效率】比TCP高,而且UDP协议比TCP协议要【简单】得多。) {
选择【UDP协议】时,【传输的数据】通常是【能容忍丢失】的.例如,一些语音视频通信的应用会选择UDP协议。) {
===================================================) {
#	----- 网络编程基础 -----) {
计算机网络的基本概念主要有：) {
	计算机网络：由2台/更多计算机组成的网络;) {
	互联网：连接网络的网络;) {
	IP地址：计算机的网络接口（通常是网卡）在网络中的唯一标识;) {
	网关：负责连接多个不同的网络,并在多个网络之间转发数据的计算机,从而实现不同的网络之间的数据通信,其转发数据的中心枢纽 = 网关。通常为 路由器/交换机;) {
	网络协议：互联网使用【TCP/IP协议】,它泛指互联网协议簇;) {
	IP协议：一种分组交换传输协议,直接发射数据包,不可靠传输;) {
	TCP协议：一种面向双向连接,可靠传输的协议;) {
	UDP协议：一种无连接,不可靠传输的协议。) {